home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 001-100 / 001-025 / 024 / modula-2 / m2 / exec.def < prev    next >
Text File  |  1995-03-17  |  9KB  |  240 lines

  1. (********************************************************************************
  2.  
  3. Name         : Exec.DEF
  4. Version      : 1.0
  5. Purpose      : Interface to Exec
  6. Author       : ms
  7. Modified     : 3.4.86  22:50 ms
  8.  
  9. ********************************************************************************)
  10.  
  11. DEFINITION MODULE Exec;
  12.  
  13. FROM SYSTEM IMPORT ADDRESS, BYTE;
  14.  
  15. TYPE (* ===== exec/nodes.h ===== *)
  16.      NodeType   = (ntUnknown, ntTask,    ntInterrupt, ntDevice,   ntMsgPort,
  17.                    ntMessage, ntFreeMsg, ntReplyMsg,  ntResource, ntLibrary,
  18.                    ntMemory,  ntSoftInt, ntFont,      ntProcess,  ntSemaphore);
  19.      NodePtr    = POINTER TO Node;
  20.      Node       = RECORD
  21.                     lnSucc, lnPred: NodePtr;
  22.                     lnType: NodeType;
  23.                     lnPri: BYTE;            (* [-127..128] *)
  24.                     lnName: ADDRESS         (* POINTER TO ARRAY OF CHAR *)
  25.                   END;
  26.      (* ===== exec/lists.h ===== *)
  27.      ListPtr    = POINTER TO List;
  28.      List       = RECORD
  29.                     lhHead, lhTail, lhTailPred: NodePtr;
  30.                     lhType: NodeType;
  31.                     lhPad: BYTE
  32.                   END;
  33.      (* ===== exec/tasks.h =====*)
  34.      TaskPtr    = POINTER TO Task;
  35.      Task       = RECORD
  36.                     tcNode: Node;
  37.                     tcFlags,
  38.                     tcState: BYTE;
  39.                     tcIDNestCnt,
  40.                     tcTDNestCnt: BYTE;
  41.                     tcSigAlloc,
  42.                     tcSigWait,
  43.                     tcSigRecvd,
  44.                     tcSigExpect: LONGINT;
  45.                     tcTrapAlloc,
  46.                     tcTrabAble: CARDINAL;
  47.                     tcExceptData,
  48.                     tcExecptCode,
  49.                     tcTrapData,
  50.                     tcTrapCode,
  51.                     tcSPReg,
  52.                     tcSPLower,
  53.                     tcSPUpper,
  54.                     tcSwitch,
  55.                     tcLaunch: ADDRESS;
  56.                     tcMemEntry: List;
  57.                     tcUserData: ADDRESS
  58.                   END;
  59.      (* ===== exec/ports.h ===== *)
  60.      MsgPortPtr = POINTER TO MsgPort;
  61.      MsgPort    = RECORD
  62.                     mpNode: Node;
  63.                     mpFlags, mpSigBit: BYTE;
  64.                     mpSigTask: TaskPtr;
  65.                     mpMsgList: List
  66.                   END;
  67.      MessagePtr = POINTER TO Message;
  68.      Message    = RECORD
  69.                     mnNode: Node;
  70.                     mnReplyPort: MsgPortPtr;
  71.                     mnLength: CARDINAL
  72.                   END;
  73.      Semaphore  = RECORD
  74.                     smMsgPort: MsgPort;
  75.                     smBids: INTEGER
  76.                   END;
  77.      (* ===== exec/interrupts.h ===== *)
  78.      Interrupt  = RECORD
  79.                     isNode: Node;
  80.                     isData: ADDRESS;
  81.                     isCode: PROC
  82.                   END;
  83.      IntVector  = RECORD
  84.                     ivData: ADDRESS;
  85.                     ivCode: PROC;
  86.                     ivNode: NodePtr
  87.                   END;
  88.      SoftIntList= RECORD
  89.                     shList: List;
  90.                     shPad: CARDINAL
  91.                   END;
  92.      (* ===== exec/memory.h ===== *)
  93.      MemChunk   = RECORD
  94.                     mcNext: POINTER TO MemChunk;
  95.                     mcBytes: LONGCARD
  96.                   END;
  97.      MemHeader  = RECORD
  98.                     mhNode: Node;
  99.                     mhAttributes: CARDINAL;
  100.                     mhFirst: POINTER TO MemChunk;
  101.                     mhLower, mhUpper: ADDRESS;
  102.                     mhFree: LONGCARD
  103.                   END;
  104.      MemEntry   = RECORD
  105.                     CASE :CARDINAL OF
  106.                     | 0: meReqs: LONGCARD
  107.                     | 1: meAddr: ADDRESS
  108.                     END;
  109.                     meLength: LONGCARD
  110.                   END;
  111.      MemList    = RECORD
  112.                     mlNode: Node;
  113.                     mlNumEntries: CARDINAL;
  114.                     mlME: ARRAY [0..0] OF MemEntry (* ?!? *)
  115.                   END;
  116. CONST
  117.      memfPublic = 0D;
  118.      memfChip   = 1D;
  119.      memfFast   = 2D;
  120.      memfClear  = 65536D;
  121.      memfLargest= 131072D;
  122.      (* ===== exec/libraries.h ===== *)
  123.      libVectSize= 6;
  124.      libReserved= 4;
  125.      libBase    = -libReserved; 
  126.      libUserDef = libBase-libReserved*libVectSize;
  127.      libNonStd  = libUserDef;
  128.      libOpen    = -6;
  129.      libClose   = -12;
  130.      libExpunge = -18;
  131.      libExtFunc = -24;
  132. TYPE Library    = RECORD
  133.                     libNode: Node;
  134.                     libFlags, libPad: BYTE;
  135.                     libNegSize,
  136.                     libPosSize,
  137.                     libVersion,
  138.                     libRevision: CARDINAL;
  139.                     libIdString: ADDRESS;
  140.                     libSum: LONGCARD;
  141.                     libOpenCnt: CARDINAL
  142.                   END;
  143.      LibraryPtr = POINTER TO Library;
  144.      (* ===== exec/devices.h ===== *)
  145.      Device     = RECORD
  146.                     ddLibrary: Library
  147.                   END;
  148.      Unit       = RECORD
  149.                     unitMsgPort: MsgPortPtr;
  150.                     unitFlags, unitPad: BYTE;
  151.                     unitOpenCnt: CARDINAL
  152.                   END;
  153.      (* ===== exec/io.h ===== *)
  154.      IORequest = RECORD
  155.                    ioMessage: Message;
  156.                    ioDevice: POINTER TO Device;
  157.                    ioUnit: POINTER TO Unit;
  158.                    ioCommand: CARDINAL;
  159.                    ioFlags,
  160.                    ioError: BYTE
  161.                  END;
  162.      IOStdReq  = RECORD
  163.                    ioMessage: Message;
  164.                    ioDevice: POINTER TO Device;
  165.                    ioUnit: POINTER TO Unit;
  166.                    ioCommand: CARDINAL; (* ORD(ioCmds) *)
  167.                    ioFlags,
  168.                    ioError: BYTE;
  169.                    ioActual,
  170.                    ioLength: LONGCARD;
  171.                    ioData: ADDRESS;
  172.                    ioOffset: LONGCARD
  173.                  END;
  174.      IOCmds    = (cmdInvalid, cmdReset, cmdRead, cmdWrite, cmdUpdate,
  175.                   cmdClear, cmdStop, cmdStart, cmdFlush, cmdNonStd);
  176.  
  177. (* ===== special functions ===== *)
  178. PROCEDURE InitCode(startClass, version: LONGINT);
  179. PROCEDURE InitStruct(initTable, memory: ADDRESS; size: LONGINT);
  180. PROCEDURE MakeLibrary(funcInit, structInit, libInit: ADDRESS; dataSize, codeSize: LONGINT);
  181. PROCEDURE MakeFunctions(target, functionArray, funcDispBase: ADDRESS);
  182. PROCEDURE FindResident(name: ARRAY OF CHAR); (* terminated by 0C! *)
  183. PROCEDURE InitResident(resident, segList: ADDRESS);
  184. PROCEDURE Alert(alertNum: LONGINT; parameters: ADDRESS);
  185. PROCEDURE Debug;
  186. (* ===== interrupts ===== *)
  187. PROCEDURE Disable;
  188. PROCEDURE Enable;
  189. PROCEDURE Forbid;
  190. PROCEDURE Permit;
  191. PROCEDURE SetSR(newSR, mask: LONGINT);
  192. PROCEDURE SuperState;
  193. PROCEDURE UserState;
  194. PROCEDURE SetIntVector(intNumber: LONGINT; VAR interrupt: Interrupt);
  195. PROCEDURE AddIntServer(intNumber: LONGINT; VAR interrupt: Interrupt);
  196. PROCEDURE RemIntServer(intNumber: LONGINT; VAR interrupt: Interrupt);
  197. PROCEDURE Cause(VAR interrupt: Interrupt);
  198. (* ===== memory allocation ===== *)
  199. PROCEDURE Allocate(VAR freeList: MemList; byteSize: LONGINT);
  200. PROCEDURE Deallocate(VAR freeList: MemList; memoryBlock: ADDRESS; byteSize: LONGINT);
  201. PROCEDURE AllocMem(byteSize, requirements: LONGINT);
  202. PROCEDURE FreeMem(memoryBlock: ADDRESS; byteSize: LONGINT);
  203. PROCEDURE AvailMem(requirements: LONGINT): BOOLEAN;
  204. PROCEDURE AllocEntry(VAR entry: MemEntry);
  205. PROCEDURE FreeEntry(VAR entry: MemEntry);
  206. (* ===== lists ===== *)
  207.  
  208. (* ===== messages ===== *)
  209. PROCEDURE AddPort(VAR port: MsgPort);
  210. PROCEDURE RemPort(VAR port: MsgPort);
  211. PROCEDURE PutMsg(VAR port: MsgPort; VAR message: Message);
  212. PROCEDURE GetMsg(VAR port: MsgPort): Message;
  213. PROCEDURE ReplyMsg(VAR message: Message);
  214. PROCEDURE WaitPort(VAR port: MsgPort);
  215. PROCEDURE FindPort(name: ARRAY OF CHAR); (* terminated by 0C! *)
  216. (* ===== libraries ===== *)
  217. PROCEDURE AddLibrary(VAR library: Library);
  218. PROCEDURE RemLibrary(VAR library: Library);
  219. PROCEDURE OldOpenLibrary(libName: ARRAY OF CHAR): LibraryPtr; (* 0C! *)
  220. PROCEDURE CloseLibrary(library: LibraryPtr); 
  221. PROCEDURE SetFunction(library: LibraryPtr; funcOffset, funcEntry: LONGINT);
  222. PROCEDURE SubLibrary(library: LibraryPtr);
  223. (* ===== devices ===== *)
  224. PROCEDURE AddDevice(VAR device: Device);
  225. PROCEDURE RemDevice(VAR device: Device);
  226. PROCEDURE OpenDevice(devName: ARRAY OF CHAR; unit: LONGINT;
  227.                      ioRequest: ADDRESS; flags: LONGINT): LONGINT;
  228. PROCEDURE CloseDevice(ioRequest: ADDRESS);
  229. PROCEDURE DoIO(ioRequest: ADDRESS);
  230. PROCEDURE SendIO(ioRequest: ADDRESS);
  231. PROCEDURE CheckIO(ioRequest: ADDRESS);
  232. PROCEDURE WaitIO(ioRequest: ADDRESS);
  233. PROCEDURE AbortIO(ioRequest: ADDRESS);
  234.  
  235. (* ===== resources ===== *)
  236.  
  237. PROCEDURE OpenLibrary(libName: ARRAY OF CHAR; version: LONGINT): LibraryPtr;
  238.  
  239. END Exec.
  240.